<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>iphone图片渐入</title>
  <style>
    :root {
      --device-width: 770px;
      --device-height: 1336px;
      --ui-width: 640px;
      font-size: 15px;
    }

    body {
      background-color: #000;
      margin: 0;
      display: flex;
      flex-direction: column;
      justify-content: center;
      align-items: center;
      min-height: 100vh;
      font-family: Helvetica;
      padding: 4rem 0;
    }

    h2 {
      color: #6e6e73;
      text-align: center;
      font-size: 4.5rem;
      font-weight: 600;
      margin: 6rem 0;
    }

    h2 p {
      margin: 0;
      color: #fff;
    }

    #iphone {
      position: relative;
      width: var(--device-width);
      height: var(--device-height);
    }

    #hardware {
      width: 100%;
      height: 100%;
      background-image: url(./iphone12-5g_on_phone.webp);
      background-size: var(--device-width) var(--device-height);

      mask-image: url(https://assets.codepen.io/2002878/iphone12-5g_on_phone_mask.png);
      -webkit-mask-image: url(./iphone12-5g_on_phone_mask.png);
      /* 配合上面的mask-image属性使用 */
      mask-size: var(--device-width) var(--device-height);
      -webkit-mask-size: var(--device-width) var(--device-height);
    }

    #ui {
      position: absolute;
      top: 0;
      left: 50%;
      transform: translateX(-50%);
    }

    #ui .top-ui {
      display: block;
      width: var(--ui-width);
      height: auto;
      /* 上 左右 下*/
      margin: 70px auto 0;
      padding-bottom: 30px;
      border-bottom: 1px solid #222;
    }

    #ui ul {
      list-style: none;
      margin: 0;
      padding: 0;

      --progress: 0
    }

    #ui ul li img {
      display: block;
      width: var(--ui-width);
      height: auto;
      /* 上 左右 下*/
      /* 由于外边距重叠，给margin-bottom没用 */
      margin: 10px auto 0;
      padding: 10px;
      border-bottom: 1px solid #222;
      /* 重点：滚动位置为0的时候最大，最淡，滚动位置为1的时候最小，最明显 */
      transform: scale(calc(1.8 - (0.8 * var(--progress)))) translateY(calc(-60px * (1 - var(--progress))));
      opacity: var(--progress);
    }
  </style>
</head>

<body>
  <h2>Superfast wireless
    <p>Hello 5G.</p>
  </h2>

  <div id="iphone">
    <div id="hardware"></div>
    <div id="ui">
      <img src="./iphone12-5g_top_ui.webp" class="top-ui" alt="">

      <ul>
        <li>
          <img src="./iphone12-5g_show_01.webp" />
        </li>
        <li>
          <img src="./iphone12-5g_show_02.webp" />
        </li>
        <li>
          <img src="./iphone12-5g_show_03.webp" />
        </li>
        <li>
          <img src="./iphone12-5g_show_04.webp" />
        </li>
        <li>
          <img src="./iphone12-5g_show_05.webp" />
        </li>
        <li>
          <img src="./iphone12-5g_show_06.webp" />
        </li>
        <li>
          <img src="./iphone12-5g_show_07.webp" />
        </li>
      </ul>
    </div>
  </div>

  <script>
    const rows = document.querySelectorAll('#ui ul li')
    const html = document.documentElement

    document.addEventListener('scroll', (e) => {
      //滚动百分比
      let scrolled = html.scrollTop / (html.scrollHeight - html.clientHeight)


      // total的意思是 img总共有多少份儿
      let total = 1 / rows.length
      for (let [index, row] of rows.entries()) {
        // 一共有7张图，每张图开始的位置都不一样，
        // 我们要做的就是 把scrolled 滚动位置 7等分  100% 7 = 0.14
        // 每张图都占用整个滚动的14% 第一张图的滚动 0-14 第二章图 14 - 28....
        // 也就是说 scrolled每走完一个14% ，就要有一张图的动效渲染完成
        //第 index 份开始的位置
        let start = total * index
        // 第 index份 结束的位置
        let end = total * (index + 1)

        console.log(start)

        // （当前滚动位置 - 之前已经滚动过的）/(当前图的结束位置 - 当前图的开始位置)
        // 当前item（图片）的0-1动效渲染进程
        let itemProgress = (scrolled - start) / (end - start)
        //  控制之前已经滚动过的 图不要再放大或者再缩小了
        if (itemProgress >= 1) itemProgress = 1
        if (itemProgress <= 0) itemProgress = 0

        row.style.setProperty('--progress', itemProgress)
      }


    })
  </script>

</body>

</html>